#!usr/bin/env python3
# -*- coding:utf-8 -*-

# PyQt5系列教程（6）：布局
# https://zhuanlan.zhihu.com/p/28559136 

from PyQt5.QtWidgets import QApplication,QWidget,QPushButton,QHBoxLayout,QVBoxLayout,QGridLayout,QLCDNumber,QFormLayout,QLabel,QLineEdit,QTextEdit
import sys,time

class MainWin(QWidget):
    def __init__(self):
        super().__init__()
        self.setGeometry(350,200,500,400)
        #self.initBox() #箱式布局实例
        #self.initGrid()
        self.initForm() 

    def initBox(self):
        
        btnLables = ["剪刀","石头","布"]
        hBox = QHBoxLayout()
        for lbl in btnLables:
            btn = QPushButton()
            btn.setText(lbl)
            hBox.addStretch(1) #设置拉伸因子  (循环3次 设置了3个)
            hBox.addWidget(btn)
        hBox.addStretch(1) #设置拉伸因子;设置x 共3+x个

        vBox = QVBoxLayout()
        vBox.addStretch(1) #这里只设置空白区域分配成一份,下面就是水平内容 也就是将水平内容置底
        vBox.addLayout(hBox)        
        self.setLayout(vBox)

    def initGrid(self):
        grid = QGridLayout()
        self.setLayout(grid)
        
        lcd = QLCDNumber()        
        grid.addWidget(lcd,0,0,3,0) #放在 0行，0列的位置，占据4行0列的宽度
        grid.setSpacing(10)
        
        positions = [(i,j) for i in range(4,9) for j in range(0,4)]
        names = ['Cls', 'Bc', '', 'Close',
                 '7', '8', '9', '/',
                 '4', '5', '6', '*',
                 '1', '2', '3', '-',
                 '0', '.', '=', '+']
        for pos,name in zip(positions,names):
            if name=="":
                continue
            btn = QPushButton()
            grid.addWidget(btn,*pos)
            btn.setText(name)
            btn.clicked.connect(self.clickNum)
            #print(name,"所在行*列:",pos)

    def initForm(self): #表单布局
        form = QFormLayout()
        self.setLayout(form)
        
        lblName = QLabel("姓名：")
        iptName = QLineEdit()
        
        lblDec = QLabel("简介：")
        iptDesc = QTextEdit()

        form.addRow(lblName,iptName)
        form.addRow(lblDec,iptDesc)

    def clickNum(self):
        send = self.sender()
        print(send.text())

if __name__=="__main__":
    app = QApplication(sys.argv)

    win = MainWin()
    win.show()

    sys.exit(app.exec_())


#布局容器的 addStretch 函数就是设置拉伸因子；也就是设置容器空白区域的空间分配(QSpacerItem的数量)
    #如果总共设置8个那么就会把空间平均分配成9分，addStretch(2) 表示那个地方占用2份

'''
教程中解析:addStretch
addStretch函数的作用是在布局器中增加一个伸缩量，
里面的参数表示QSpacerItem的个数，
默认值为零，会将你放在layout中的空间压缩成默认的大小。
例如用addStretch函数实现将QHBoxLayout的布局器的空白空间分配。
我们总结一下今天的内容
绝对位置
箱式布局
栅格布局
表单布局
编辑伙伴 (还没尝试过)


'''
